From a8a7250adedf87c28523c79b622a8cf7a771a4f3 Mon Sep 17 00:00:00 2001 From: robertlipe Date: Mon, 1 Dec 2014 21:11:43 +0000 Subject: [PATCH] Ralf Horstmann contributes support for Mynav Map Manager and VDO GP7. --- gpsbabel/Makefile.in | 4 +- gpsbabel/mynav.cc | 172 ++++++++++++++++++++++++++++ gpsbabel/reference/track/mynav.ftn | 79 +++++++++++++ gpsbabel/reference/track/mynav.trc | 18 +++ gpsbabel/reference/track/mynav1.gpx | 75 ++++++++++++ gpsbabel/reference/track/mynav2.gpx | 135 ++++++++++++++++++++++ gpsbabel/testo.d/mynav.test | 8 ++ gpsbabel/vecs.cc | 8 ++ gpsbabel/xmldoc/formats/mynav.xml | 15 +++ 9 files changed, 513 insertions(+), 1 deletion(-) create mode 100644 gpsbabel/mynav.cc create mode 100644 gpsbabel/reference/track/mynav.ftn create mode 100644 gpsbabel/reference/track/mynav.trc create mode 100644 gpsbabel/reference/track/mynav1.gpx create mode 100644 gpsbabel/reference/track/mynav2.gpx create mode 100644 gpsbabel/testo.d/mynav.test create mode 100644 gpsbabel/xmldoc/formats/mynav.xml diff --git a/gpsbabel/Makefile.in b/gpsbabel/Makefile.in index 55d6ef118..3a4401da5 100644 --- a/gpsbabel/Makefile.in +++ b/gpsbabel/Makefile.in @@ -80,7 +80,8 @@ ALL_FMTS=$(MINIMAL_FMTS) gtm.o gpsutil.o \ pocketfms_bc.o pocketfms_fp.o pocketfms_wp.o naviguide.o enigma.o \ vpl.o teletype.o jogmap.o bushnell.o bushnell_trl.o wintec_tes.o \ subrip.o garmin_xt.o garmin_fit.o lowranceusr4.o \ - mtk_locus.o googledir.o mapbar_track.o f90g_track.o mapfactor.o energympro.o + mtk_locus.o googledir.o mapbar_track.o f90g_track.o mapfactor.o energympro.o \ + mynav.o FMTS=@FMTS@ @@ -821,6 +822,7 @@ mtk_locus.o: mtk_locus.cc defs.h config.h queue.h zlib/zlib.h \ mtk_logger.o: mtk_logger.cc defs.h config.h queue.h zlib/zlib.h \ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h session.h \ src/core/datetime.h gbser.h +mynav.o: mynav.cc defs.h config.h gbfile.h navicache.o: navicache.cc defs.h config.h queue.h zlib/zlib.h \ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h session.h \ src/core/datetime.h src/core/file.h diff --git a/gpsbabel/mynav.cc b/gpsbabel/mynav.cc new file mode 100644 index 000000000..d93d72527 --- /dev/null +++ b/gpsbabel/mynav.cc @@ -0,0 +1,172 @@ +/* + Handle MyNav TRC format .trc and .ftn files + + Copyright (c) 2014 Ralf Horstmann + Copyright (C) 2014 Robert Lipe, robertlipe+source@gpsbabel.org + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA + + */ + +#include + +#include "defs.h" + +#define MYNAME "mynav" + +typedef enum { + fld_type = 0, + fld_lon, + fld_lat, + fld_direction, + fld_speed, + fld_altitude, + fld_timestamp, + fld_duration, + fld_gps_valid, + fld_distance, + fld_ascent, + fld_cadence, + fld_heart_rate, + fld_id, + fld_total_duration, + fld_terminator +} field_e; + +static route_head* mynav_track; +static gbfile* fin; + +//******************************************************************************* +// local helper functions +//******************************************************************************* +static void +mynav_rd_line(char *buf) +{ + Waypoint* wpt = NULL; + QStringList fields; + QString line; + bool ok; + int val_type; + int val_gps_valid; + double val_lat; + double val_lon; + double val_alt; + int val_time; + + line = buf; + fields = line.split("|"); + + if (global_opts.debug_level > 1) { + qDebug() << "line: " << line; + for (int i = 0; i < fields.size(); i++) + qDebug() << "field" << i << fields.at(i); + } + + // don't consider lines without latitude/longitude + if (fields.size() < fld_lat) + return; + + // only type 1 and type 5 lines contain coordinates + val_type = fields.at(fld_type).trimmed().toInt(&ok); + if (!ok) + return; + if (val_type != 1 && val_type != 5) + return; + + // This field is not present in .trc files, only in .ftn, so + // ignore line if present and != 1 + if (fields.size() >= fld_gps_valid) { + val_gps_valid = fields.at(fld_gps_valid).trimmed().toInt(&ok); + if (!ok || val_gps_valid != 1) + return; + } + + val_lon = fields.at(fld_lon).trimmed().toDouble(&ok) / 3600000.0; + if (!ok) + return; + val_lat = fields.at(fld_lat).trimmed().toDouble(&ok) / 3600000.0; + if (!ok) + return; + + wpt = new Waypoint; + wpt->latitude = val_lat; + wpt->longitude = val_lon; + + if (fields.size() >= fld_altitude) { + val_alt = fields.at(fld_altitude).trimmed().toDouble(&ok); + if (ok) + wpt->altitude = val_alt; + } + + if (fields.size() >= fld_timestamp) { + val_time = fields.at(fld_timestamp).trimmed().toInt(&ok); + if (ok) + wpt->SetCreationTime(val_time); + } + + track_add_wpt(mynav_track, wpt); +} + + +//******************************************************************************* +// global callbacks called by gpsbabel main process +//******************************************************************************* + +static void +mynav_rd_init(const char* fname) +{ + fin = gbfopen(fname, "rb", MYNAME); + mynav_track = route_head_alloc(); + track_add_head(mynav_track); +} + +static void +mynav_rd_deinit(void) +{ + gbfclose(fin); +} + +static void +mynav_rd(void) +{ + char * buff; + + while ((buff = gbfgetstr(fin))) { + buff = lrtrim(buff); + if ((*buff == '\0') || (*buff == '#')) { + continue; + } + mynav_rd_line(buff); + } +} + +ff_vecs_t mynav_vecs = { + ff_type_file, + { + ff_cap_none, // waypoints + ff_cap_read, // tracks + ff_cap_none // routes + }, + mynav_rd_init, // rd_init + NULL, // wr_init + mynav_rd_deinit, // rd_deinit + NULL, // wr_deinit + mynav_rd, // read + NULL, // write + NULL, // exit + NULL, //args + CET_CHARSET_ASCII, 0 //encode,fixed_encode + //NULL //name dynamic/internal? +}; diff --git a/gpsbabel/reference/track/mynav.ftn b/gpsbabel/reference/track/mynav.ftn new file mode 100644 index 000000000..48ae74147 --- /dev/null +++ b/gpsbabel/reference/track/mynav.ftn @@ -0,0 +1,79 @@ +0|6.2.1.0|1.0|100|2|m|m +0|2140 +0|2090 +0|MARIO|M|30|74|191 +0|0|0|0|0|5 +1|0|0|0|0|450|1405862664|0|0|0|0|0|0|1 +1|0|0|0|0|451|1405862669|0|0|0|0|0|0|2 +1|0|0|0|0|447|1405862675|0|0|0|0|0|0|3 +1|0|0|0|0|447|1405862680|0|0|0|0|0|0|4 +1|0|0|0|0|450|1405862685|0|0|0|0|0|0|5 +1|0|0|0|0|449|1405862690|0|0|0|0|0|0|6 +1|0|0|0|0|450|1405862695|0|0|0|0|0|0|7 +1|0|0|0|0|449|1405862700|0|0|0|0|0|0|8 +1|0|0|0|0|449|1405862705|0|0|0|0|0|0|9 +1|0|0|0|0|449|1405862710|0|0|0|0|0|0|10 +1|0|0|0|0|449|1405862715|0|0|0|0|0|0|11 +1|0|0|0|0|449|1405862720|0|0|0|0|0|0|12 +1|0|0|0|0|450|1405862725|0|0|0|0|0|0|13 +9|1405862659|0|0|1405862725|0|0|0|0|0|0|0|0|0|0|0|0|451|447|0|0|0|0|0|0|0|0 +1|0|0|0|0|449|1405862730|0|0|0|0|0|0|14 +1|0|0|0|0|449|1405862735|0|0|0|0|0|0|15 +1|0|0|0|0|448|1405862740|0|0|0|0|0|0|16 +1|0|0|0|0|449|1405862745|0|0|0|0|0|0|17 +1|0|0|0|0|449|1405862750|0|0|0|0|0|0|18 +1|0|0|0|0|449|1405862755|0|0|0|0|0|0|19 +1|0|0|0|0|449|1405862760|0|0|0|0|0|0|20 +1|0|0|0|0|450|1405862765|0|0|0|0|0|0|21 +1|0|0|0|0|449|1405862770|0|0|0|0|0|0|22 +1|0|0|0|0|450|1405862775|0|0|0|0|0|0|23 +1|0|0|0|0|450|1405862780|0|0|0|0|0|0|24 +1|0|0|0|0|450|1405862785|0|0|0|0|0|0|25 +1|0|0|0|0|450|1405862790|0|0|0|0|0|0|26 +9|1405862659|0|0|1405862790|0|0|0|0|0|0|0|0|0|0|0|0|451|447|0|0|0|0|0|0|0|0 +1|0|0|0|0|453|1405862795|0|0|0|0|0|0|27 +1|0|0|0|0|451|1405862800|0|0|0|0|0|0|28 +1|0|0|0|0|452|1405862805|0|0|0|0|0|0|29 +1|0|0|0|0|453|1405862810|0|0|0|0|0|0|30 +1|0|0|0|0|452|1405862815|0|0|0|0|0|0|31 +1|0|0|0|0|452|1405862820|0|0|0|0|0|0|32 +1|0|0|0|0|452|1405862825|0|0|0|0|0|0|33 +1|0|0|0|0|454|1405862830|0|0|0|0|0|0|34 +1|0|0|0|0|455|1405862835|0|0|0|0|0|0|35 +1|0|0|0|0|457|1405862840|0|0|0|0|0|0|36 +1|0|0|0|0|458|1405862845|0|0|0|0|0|0|37 +1|31928364|184598304|0|0|460|1407050195|0|0|0|0|0|0|38 +1|31927716|184597590|210|4.8|461|1407050200|9|1|46|0|0|0|39 +9|1405862659|9|46|1407050200|5.364|5.364|0|0|0|0|0|0|0|0|0|0|461|447|0|0|0|0|0|0|0|0 +1|31927038|184597068|219|4.928|463|1407050205|14|1|81|7.8|0|0|40 +1|31926150|184596396|214|5.134|464|1407050210|19|1|108|4.5|0|0|41 +1|31925472|184595724|213|4.728|465|1407050215|24|1|133|5.4|0|0|42 +1|31925040|184595184|196|3.395|465|1407050220|29|1|151|4|0|0|43 +1|31924938|184594986|191|0|464|1407050225|33|1|158|0|0|0|44 +1|31924956|184595022|191|0|465|1407050230|33|1|158|0|0|0|45 +1|31924944|184595040|191|0|465|1407050235|33|1|158|0|0|0|46 +1|31924920|184595058|191|0|465|1407050240|33|1|158|0|0|0|47 +1|31924866|184595040|191|0|465|1407050245|33|1|158|0|0|0|48 +1|31924794|184594980|191|0|465|1407050250|33|1|158|0|0|0|49 +1|31918374|184589958|191|0|465|1407050255|33|1|158|0|0|0|50 +1|31918386|184589952|191|0|464|1407050260|33|1|158|0|0|0|51 +1|31918398|184589952|191|0|464|1407050265|33|1|158|0|0|0|52 +9|1405862659|33|158|1407050265|4.85|6.146|5|0|6.3|9|0|0|0|0|0|0|466|447|0.4|0|0|0|0|0|82|0 +1|31918410|184589976|191|0|465|1407050270|33|1|158|0|0|0|53 +1|31918404|184589964|191|0|465|1407050275|33|1|158|0|0|0|54 +1|31918386|184589970|191|0|465|1407050280|33|1|158|0|0|0|55 +1|31918368|184589970|191|0|465|1407050285|33|1|158|0|0|0|56 +1|31918368|184589982|191|0|465|1407050290|33|1|158|0|0|0|57 +1|31918392|184589988|191|0|465|1407050295|33|1|158|0|0|0|58 +1|31918392|184590000|191|0|464|1407050300|33|1|158|0|0|0|59 +1|31918314|184589994|191|0|464|1407050305|33|1|158|0|0|0|60 +1|31917924|184589814|235|1.837|465|1407050310|66|1|368|0|0|0|61 +1|31917498|184589580|243|2.418|466|1407050315|71|1|379|0|0|0|62 +1|31916682|184589832|295|3.997|465|1407050321|76|1|397|0|0|0|63 +1|31915656|184590150|295|4.337|466|1407050325|81|1|419|0|0|0|64 +1|31914558|184590528|298|5.006|465|1407050330|86|1|444|0|0|0|65 +9|1405862659|86|444|1407050330|5.18|6.146|5|0|6.3|9|0|0|0|0|0|0|466|447|0.4|0|0|0|0|0|82|0 +1|31913154|184590942|294|5.947|463|1407050335|91|1|474|-6.2|0|0|66 +1|31911576|184591416|296|7.032|461|1407050341|96|1|508|-5.7|0|0|67 +1|31909878|184591896|295|7.104|460|1407050346|100|1|537|-5|0|0|68 +1|31908486|184592334|298|5.314|458|1407050351|106|1|574|-4|0|0|69 diff --git a/gpsbabel/reference/track/mynav.trc b/gpsbabel/reference/track/mynav.trc new file mode 100644 index 000000000..561daef8b --- /dev/null +++ b/gpsbabel/reference/track/mynav.trc @@ -0,0 +1,18 @@ +0|-100|1407050197|1407063420 +0|\SDMMC\MyNav\MyNav_DMW\TRC\HARTMANN.trc|||| +1|31927800|184597626|0|5.17|460|1407050197 +1|31927992|184597488|210|4.239|460|1407050198 +1|31927716|184597590|210|4.8|461|1407050199 +1|31927668|184597350|213|4.846|461|1407050200 +1|31927236|184597080|214|4.347|461|1407050201 +1|31927494|184597134|214|4.064|461|1407050202 +1|31927206|184597170|213|4.692|462|1407050203 +1|31927038|184597068|219|4.928|463|1407050204 +1|31926822|184596948|227|4.975|463|1407050205 +1|31926642|184596804|219|4.995|462|1407050206 +1|31926474|184596666|216|5.103|462|1407050207 +1|31926312|184596528|214|5.124|462|1407050208 +1|31926150|184596396|214|5.134|463|1407050209 +1|31926012|184596264|216|5.124|465|1407050210 +1|31925880|184596120|215|4.975|464|1407050211 +1|31925748|184595976|211|4.97|464|1407050212 diff --git a/gpsbabel/reference/track/mynav1.gpx b/gpsbabel/reference/track/mynav1.gpx new file mode 100644 index 000000000..baa87ea3d --- /dev/null +++ b/gpsbabel/reference/track/mynav1.gpx @@ -0,0 +1,75 @@ + + + + + + + + + + 460.000000 + + + + 460.000000 + + + + 461.000000 + + + + 461.000000 + + + + 461.000000 + + + + 461.000000 + + + + 462.000000 + + + + 463.000000 + + + + 463.000000 + + + + 462.000000 + + + + 462.000000 + + + + 462.000000 + + + + 463.000000 + + + + 465.000000 + + + + 464.000000 + + + + 464.000000 + + + + + diff --git a/gpsbabel/reference/track/mynav2.gpx b/gpsbabel/reference/track/mynav2.gpx new file mode 100644 index 000000000..2970a2451 --- /dev/null +++ b/gpsbabel/reference/track/mynav2.gpx @@ -0,0 +1,135 @@ + + + + + + + + + + 461.000000 + + + + 463.000000 + + + + 464.000000 + + + + 465.000000 + + + + 465.000000 + + + + 464.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 464.000000 + + + + 464.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 465.000000 + + + + 464.000000 + + + + 464.000000 + + + + 465.000000 + + + + 466.000000 + + + + 465.000000 + + + + 466.000000 + + + + 465.000000 + + + + 463.000000 + + + + 461.000000 + + + + 460.000000 + + + + 458.000000 + + + + + diff --git a/gpsbabel/testo.d/mynav.test b/gpsbabel/testo.d/mynav.test new file mode 100644 index 000000000..86d9ab7f3 --- /dev/null +++ b/gpsbabel/testo.d/mynav.test @@ -0,0 +1,8 @@ +# +# Basic mynav tests (readonly) +# +rm -f ${TMPDIR}/mynav* +gpsbabel -i mynav -f ${REFERENCE}/track/mynav.trc -o gpx,garminextensions -F ${TMPDIR}/mynav1.gpx +compare ${REFERENCE}/track/mynav1.gpx ${TMPDIR}/mynav1.gpx +gpsbabel -i mynav -f ${REFERENCE}/track/mynav.ftn -o gpx,garminextensions -F ${TMPDIR}/mynav2.gpx +compare ${REFERENCE}/track/mynav2.gpx ${TMPDIR}/mynav2.gpx diff --git a/gpsbabel/vecs.cc b/gpsbabel/vecs.cc index 90c6f5442..c94d9e39b 100644 --- a/gpsbabel/vecs.cc +++ b/gpsbabel/vecs.cc @@ -87,6 +87,7 @@ extern ff_vecs_t mtk_fvecs; extern ff_vecs_t mtk_m241_vecs; extern ff_vecs_t mtk_m241_fvecs; extern ff_vecs_t mtk_locus_vecs; +extern ff_vecs_t mynav_vecs; extern ff_vecs_t navicache_vecs; extern ff_vecs_t netstumbler_vecs; extern ff_vecs_t nmea_vecs; @@ -1084,6 +1085,13 @@ vecs_t vec_list[] = { "cpo", NULL, }, + { + &mynav_vecs, + "mynav", + "MyNav TRC format", + "trc", + NULL, + }, #endif // MAXIMAL_ENABLED { NULL, diff --git a/gpsbabel/xmldoc/formats/mynav.xml b/gpsbabel/xmldoc/formats/mynav.xml new file mode 100644 index 000000000..5ea6ecaea --- /dev/null +++ b/gpsbabel/xmldoc/formats/mynav.xml @@ -0,0 +1,15 @@ + + Input support for the TRC file format used by MyNav Map + Manager and VDO GP7 GPS + devices. + + + For information on the data format see track format + specification. + + + + gpsbabel -i mynav -f infile.trc -o gpx,garminextensions -F outfile.gpx + + -- 2.30.2